//===--- StringInterpolation.swift.gyb - String Interpolation --*- swift -*-==//
//
// This source file is part of the Swift.org open source project
//
// Copyright (c) 2014 - 2015 Apple Inc. and the Swift project authors
// Licensed under Apache License v2.0 with Runtime Library Exception
//
// See http://swift.org/LICENSE.txt for license information
// See http://swift.org/CONTRIBUTORS.txt for the list of Swift project authors
//
//===----------------------------------------------------------------------===//

%{

from SwiftIntTypes import *

# Number of bits in the Builtin.Word type
word_bits = int(CMAKE_SIZEOF_VOID_P) * 8

StreamableTypes = [
    'String',
    'Character',
    'UnicodeScalar',
  ]

PrintableTypes = [
    'Bool',
    'Float32',
    'Float64'
  ]

for int_ty in all_integer_types(word_bits):
    PrintableTypes.append(int_ty.stdlib_name)

}%

extension String : StringInterpolationConvertible {
  /// Create an instance by concatenating the elements of `strings`.
  @effects(readonly)
  public
  init(stringInterpolation strings: String...) {
    self.init()
    for str in strings {
      self += str
    }
  }

  /// Create an instance containing `expr`'s `print` representation.
  public
  init<T>(stringInterpolationSegment expr: T) {
    self = String(expr)
  }

% for Type in StreamableTypes:
  public init(stringInterpolationSegment expr: ${Type}) {
    self = _toStringReadOnlyStreamable(expr)
  }
% end

% for Type in PrintableTypes:
  public init(stringInterpolationSegment expr: ${Type}) {
    self = _toStringReadOnlyPrintable(expr)
  }
% end
}

// ${'Local Variables'}:
// eval: (read-only-mode 1)
// End:
